package com.itzhoun.createModel.singleton;

/**
 * 静态内部类 线程安全
 * @author 周楠
 * @Date 2022/12/08/下午 11:04
 */
public class SingletonInnerStatic {

    public SingletonInnerStatic() {
    }

    public static class SingletonHolder {
        private static final SingletonInnerStatic SINGLETON_INNER_STATIC = new SingletonInnerStatic();

    }

    public static SingletonInnerStatic getInstance(){
        SingletonInnerStatic singletonInnerStatic = SingletonHolder.SINGLETON_INNER_STATIC;
        System.out.println("对象:" + singletonInnerStatic);
        return singletonInnerStatic;
    }

    public static void main(String[] args) {

        Runnable runnable = SingletonInnerStatic::getInstance;

        Thread t1 = new Thread(runnable);
        Thread t2 = new Thread(runnable);
        t1.start();
        t2.start();

        //静态内部类是基于懒汉式 既保证了性能又保证了线程安全
        //静态内部类基于类初始化的延迟加载解决方案
        //静态内部了也是由于类按需加载 同时指向同一个instance地址

        //优点：只不过将类实例化的过程放在了静态代码块中，也是在类装载的时候，就执行静态代码块中的代码，初始化类的实例
        //缺点：在类装载的时候就完成实例化，没有达到Lazy Loading的效果。如果从始至终从未使用过这个实例，则会造成内存的浪费。




    }
}
